home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / C64 / U-Utilities / (c)u3.d64 / multicopy.c (.txt) < prev    next >
Commodore BASIC  |  2007-02-11  |  4KB  |  129 lines

  1. 0 POKE55,0:POKE56,160
  2. 1 FORI=828TO883:READA:POKEI,A:NEXTI
  3. 2 REM MODIFIED FROM 'BACKUP 1541' I GIVE CREDIT AND APOLOGIES TO HARVEY HERMAN
  4. 3 REM MODIFICATION BY JERRY BYBEE, 404 ROSEMERE, MAQUOKETA IA 52060
  5. 10 REM"D=DSAVE"@BACK2",DO:?DS%:CATALOGD0
  6. 20 BB[178][194](44)[170]27:[151]995,BB
  7. 30 [151]998,[194](55):[151]999,[194](56):[151]55,0:[151]56,BB:[156]
  8. 40 BB[178][194](995)
  9. 50 N[178][194](999)[171]BB[171]1:BA[178]BB[172]256:MA[178]828
  10. 60 [134]BM%(35,24)
  11. 70 [129]J[178]0[164]7:TA(J)[178]2[174]J:[130]J
  12. 80 [153]"LOADMULTICOPY 1541WAIT"
  13. 82 [153]:[153]"DESTINATION DISKS MUST BE ALREADY       FORMATTED"
  14. 84 [153]:[153]"YOU CAN COPY ANY # OF DESTINATION       DISKS FROM ONE PASS OF THE SOURCE
  15. 85 PRINT"DISK
  16. 86 [153]:[153]"MAKE SURE TO KEEP TRACK OF WHAT         YOU'VE COPIED TO EACH DISK
  17. 90 PRINT"'GOTO 10000' IF PROGRAM QUITS ABNORMALLY"
  18. 100 PRINT""N"BUFFERS AVAILABLE"
  19. 110 OPEN1,8,15
  20. 200 REM MAIN FUNCTIONS
  21. 220 D$="S":GOSUB3220
  22. 250 GOSUB2500
  23. 260 T=TS:S=0:NU=1:T1=T:S1=S
  24. 270 PRINT#1,"I0":OPEN3,8,3,"#"
  25. 280 PRINT"READING BLOCK #";
  26. 281 T2=T1:S2=S1
  27. 290 IFBM%(T1,S1)=0THENGOSUB2000:NU=NU+1:IFNU>NTHEN320
  28. 300 S1=S1+1:IFS1>20THENS1=0:T1=T1+1
  29. 310 IFT1<TF+1THEN290
  30. 320 PRINT""
  31. 330 CLOSE3
  32. 340 D$="D":GOSUB3200
  33. 350 NU=1:T1=T:S1=S
  34. 360 T2=T:S2=S
  35. 365 PRINT"WRITING BUFFER #";
  36. 370 PRINT#1,"I0":OPEN3,8,3,"#"
  37. 380 IFBM%(T1,S1)=0THENGOSUB2200:NU=NU+1:IFNU>NTHEN410
  38. 390 S1=S1+1:IFS1>20THENS1=0:T1=T1+1
  39. 400 IFT1<TF+1THEN380
  40. 410 PRINT""
  41. 420 CLOSE3
  42. 430 S=S1+1:IFS>20THENS=0:T1=T1+1
  43. 440 T=T1:IFT>TFTHEN500
  44. 450 D$="S":GOSUB3200:IFD$="D"THENNU=1:T1=T2:S1=S2:GOTO365
  45. 460 NU=1:T1=T:S1=S:GOTO270
  46. 500 REM FINISHED XFERS
  47. 530 PRINT:PRINT"BACKUP COMPLETE FOR THIS DISK"
  48. 532 INPUT"ANOTHER DISK 1-YES  2-NO";YN
  49. 534 IFYN=2THENCLOSE1:CLOSE3:POKE55,PEEK(998):POKE56,PEEK(999):CLR:END
  50. 536 IFYN=1THENPRINT"INSERT OTHER DISK HIT ANY KEY"
  51. 537 GETT$:IFT$=""GOTO537
  52. 538 T1=T2:S1=S2:NU=1:GOTO365
  53. 539 GOTO532
  54. 2000 REM READ BLOCK T1,S1 TO BUFFER # NU
  55. 2010 C=.
  56. 2020 PRINT#1,"U1";3;0;T1;S1
  57. 2030 GOSUB3000:IFNOTERTHEN2060
  58. 2040 C=C+1:IFC<3GOTO2020
  59. 2050 PRINTER$:FORJ=(BB+NU)*256TO(BB+NU)*256+255:POKEJ,.:NEXTJ:GOTO2100
  60. 2060 PRINT#1,"B-P";3;0
  61. 2070 IFNU<>0THENPRINT"   [157][157][157]";RIGHT$("  "+STR$(NU),3);"[157][157][157]";
  62. 2080 POKE996,PEEK(3):POKE997,PEEK(4):POKE4,BB+NU:SYSMA
  63. 2085 POKE3,PEEK(996):POKE4,PEEK(997)
  64. 2090 IFST<>.ANDST<>64THENGOSUB3000:GOTO2050
  65. 2100 RETURN
  66. 2200 REM WRITE BLOCK T1,S1 FROM BUFFER # NU
  67. 2210 C=.
  68. 2220 PRINT#1,"B-A";0;T1;S1:PRINT#1,"B-P";3;0
  69. 2230 PRINT"   [157][157][157]";RIGHT$("  "+STR$(NU),3);"[157][157][157]";
  70. 2240 POKE996,PEEK(3):POKE997,PEEK(4):POKE4,BB+NU:SYSMA+3
  71. 2245 POKE3,PEEK(996):POKE4,PEEK(997)
  72. 2250 IFST<>.ANDST<>64THENPRINT"IEEE WRITE ERROR"ST"[146]":GOTO10000
  73. 2260 PRINT#1,"U2";3;0;T1;S1
  74. 2270 GOSUB3000:IFNOTERTHEN2300
  75. 2280 C=C+1:IFC<3THEN2260
  76. 2290 PRINT"UNRECOVERABLE WRITE ERROR"ER$:GOTO10000
  77. 2300 RETURN
  78. 2500 REM GET BAM TO BM%(T,S)
  79. 2510 TS=1:TF=.
  80. 2520 PRINT#1,"I0":OPEN3,8,3,"#"
  81. 2530 S9=0
  82. 2540 PRINT"TRACK #   BLOCKS TO XFER"
  83. 2550 PRINT"[163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]"
  84. 2560 NU=0:T1=18:S1=0:C0$=CHR$(.):GOSUB2000
  85. 2570 BY=4
  86. 2580 T%=(BY-4)/4+1
  87. 2590 PRINT"  ";T%;
  88. 2600 IFPEEK(BA+BY)=.THENFORJ=.TO20:BM%(T%,J)=.:NEXTJ:BY=BY+4:GOTO2650
  89. 2610 S=0
  90. 2620 BY=BY+1:A0=PEEK(BA+BY):FORJ=.TO7:BM%(T%,S)=A0ANDTA(J):S=S+1:NEXT
  91. 2630 IFS<22THEN2620
  92. 2640 BY=BY+1
  93. 2650 ES=21:IFT%>17THENES=19
  94. 2660 IFT%>24THENES=18
  95. 2670 IFT%>30THENES=17
  96. 2680 FORJ=ESTO24:BM%(T%,J)=-1:NEXT
  97. 2690 SM=.:FORJ=.TO20:IFBM%(T%,J)=.THENSM=SM+1
  98. 2700 NEXT:PRINTTAB(12);SM:S9=S9+SM
  99. 2710 IFSM=.ANDTS=T%THENTS=TS+1:GOTO2730
  100. 2720 IFSM<>.THENTF=T%
  101. 2730 IFBY<143THEN2580
  102. 2740 CLOSE3
  103. 2750 PRINT"START =";TS;" FINISH =";TF
  104. 2760 PRINT"A TOTAL OF";S9;"BLOCKS TO XFER"
  105. 2770 S8=90+25+(.650+.980)*S9
  106. 2780 S7=INT(S8/60):PRINT"APPROX";S7;":"INT(S8-S7*60);"FOR COPY"
  107. 2790 RETURN
  108. 3000 REM READ ERR CH TO ER,ER$
  109. 3010 INPUT#1,E0$,E1$,E2$,E3$:ER$=E0$+","+E1$+","+E2$+","+E3$
  110. 3020 ER=LEN(E0$):IFERTHENER=VAL(E0$)
  111. 3030 RETURN
  112. 3200 REM REM INSTRUCT TO SWAP DISK GIVEN IN D$
  113. 3210 IFD$="D"THENS1$="DESTINATION":GOTO3230
  114. 3211 INPUT"ANOTHER DISK Y/N";YN$
  115. 3212 IFYN$="N"THENT1=T2:S1=S2:GOTO3220
  116. 3213 IFYN$="Y"THEND$="D":GOTO3230
  117. 3214 GOTO3211
  118. 3220 S1$="SOURCE"
  119. 3230 PRINT"INSERT ";S1$;" DISK, PRESS  [146]"
  120. 3240 GETA$:IFA$<>" "THEN3240
  121. 3250 OPEN2,8,0,"$0"
  122. 3260 GOSUB3000:IFER>0THEN10000
  123. 3300 CLOSE2:RETURN
  124. 10000 REM DROP OUT
  125. 10010 POKE55,PEEK(998):POKE56,PEEK(999):CLR:STOP
  126. 15000 DATA76,66,3,76,91,3,162,3,32,198,255,160,0,132,3,32,207,255,145
  127. 15010 DATA3,165,144,208,3,200,208,244,32,204,255,96,162,3,32,201,255,160
  128. 15020 DATA0,132,3,177,3,32,210,255,165,144,208,3,200,208,244,32,204,255,96
  129.